package com.catosist.run.business.gestorpersona;

import com.catosist.run.dataaccess.domain.PersonaDao;

import com.catosist.run.dataaccess.model.PersonaVO;

import com.catosist.run.services.PersonaDTO;

import java.util.Iterator;







import java.util.LinkedList;
import java.util.List;
import org.hibernate.exception.SQLGrammarException;

/**
 *
 * @author Bicho
 */
public class GestorPersonaImpl implements GestorPersona {

    public GestorPersonaImpl() {
    }

    @Override
    public List<PersonaDTO> getAll() {

        System.out.println("GestorPersonaImpl: Obtener todas Personas");
//        if (personaVOs == null) {
        personaVOs = personaDao.getAll();
//        }
        List<PersonaDTO> personaDTOs = new LinkedList<PersonaDTO>();
        try {
            for (Iterator<PersonaVO> it = personaVOs.iterator(); it.hasNext();) {
                PersonaVO personaVO = it.next();
                //System.out.println("viajeID: " + viajeVO.getFingreso().toString());
                personaDTOs.add(new PersonaDTO(personaVO.getId(),
                        personaVO.getNombre(), personaVO.getAppaterno(),
                        personaVO.getApmaterno(), personaVO.getDireccion(),
                        personaVO.getActivo()));
                //                        ,viajeVO.getFingreso().toString()));
            }
        } catch (SQLGrammarException ex) {
            System.out.println("Exception GestorViaje: " + ex.getMessage());
        }
        return personaDTOs;

    }

    @Override
    public PersonaDTO getByIndex(int indice) {
//        throw new UnsupportedOperationException("Not supported yet.");
        return null;
    }

    @Override
    public PersonaDTO getById(int indice) {
        PersonaVO personaVO = personaDao.get(indice);
        PersonaDTO personaDTO = new PersonaDTO();
        personaDTO.setActivo(personaVO.getActivo());
        personaDTO.setApmaterno(personaVO.getApmaterno());
        personaDTO.setAppaterno(personaVO.getAppaterno());
        personaDTO.setDireccion(personaVO.getDireccion());
        personaDTO.setId(personaVO.getId());
        personaDTO.setNombre(personaVO.getNombre());
        return personaDTO;
    }

//    @Override
//    public PersonaVO getVOatIndex(int indice) {
//        return personaVOs.get(indice);
//    }
    public PersonaDao getPersonaDao() {
        return personaDao;
    }

    public void setPersonaDao(PersonaDao personaDao) {
        this.personaDao = personaDao;
    }

    @Override
    public int getIdAtIndex(int indice) {
        return personaVOs.get(indice).getId();
    }
    private List<PersonaVO> personaVOs;
    private PersonaDao personaDao;

    @Override
    public void saveOrUpdate(PersonaDTO o) {
        PersonaVO personaVO = new PersonaVO();

        if (o.getId() > 0) {
            personaVO.setId(o.getId());
        }
        personaVO.setNombre(o.getNombre());
        personaVO.setAppaterno(o.getAppaterno());
        personaVO.setApmaterno(o.getApmaterno());
        personaVO.setDireccion(o.getDireccion());
        personaVO.setActivo(o.getActivo());

        personaDao.saveOrUpdate(personaVO);
        this.getAll();
    }

    @Override
    public void deleteById(int i) {
        PersonaVO personaVO = personaDao.get(i);
        if (personaVO.getViajes().size() > 0) {
            personaVO.setActivo(false);
            personaDao.update(personaVO);
        } else {
            personaDao.delete(personaVO);
        }


    }

    @Override
    public void updateListVo() {
        personaVOs = personaDao.getAll();
    }

    public int getIndexOf(int voId) {
        for (int i = 0; i < personaVOs.size(); i++) {
            PersonaVO personaVO = personaVOs.get(i);
            if (personaVO.getId() == voId) {
                return i;
            }
        }
        return 0;
    }

    public void deleteByIndex(int index) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
